package testes;

import java.util.ArrayList;

import org.junit.Assert;
import org.junit.Before;
import org.junit.Test;

import bean.Grupo;
import bean.Jogador;


public class GrupoTest {

	private Grupo g1;
	private Grupo g2;
	private Jogador j1, j2, j3, j4,j5,j6;
	
	@Before
	public void setUp() throws Exception{
		//Inicializo os Jogadores e Grupos
		
		j1 = new Jogador ("Daniel", "20/05", "Campina Grande", "Brasil", "danielfariasleite@gmail.com", "123456");
		j2 = new Jogador ("Matheus", "14/01", "Campina Grande", "Brasil", "matheus1401@gmail.com", "654321");
		j3 = new Jogador ("Claudio", "25/06", "Aracaju", "Brasil", "claudiocaj@gmail.com", "1234");
		j4 = new Jogador ("Lucas", "20/03", "Campina Grande", "Brasil", "lucas.s.sampaio@gmail.com", "987654");
		j5 = new Jogador ("Joao Paulo", "17/12", "Patos", "Costa do Marfim", "joaotargino@gmail.com", "002233");
		j6 = new Jogador ("Raquel", "10/11", "Campina Grande", "Argentina", "raquelvl@gmail.com", "777777");
		
		g1 = new Grupo("Daniel",j1);
		g2 = new Grupo("Matheus",j2);
		
		g1.adicionaJogador(j3);
		g1.adicionaJogador(j5);
		
		g2.adicionaJogador(j4);
		g2.adicionaJogador(j6);
	}
	
	
	@Test
	public void testJogadores() throws Exception {
		ArrayList<Jogador> jogadores = new ArrayList<Jogador>();
		jogadores.add(j3);
		jogadores.add(j5);
		
		ArrayList<Jogador> jogadores2 = new ArrayList<Jogador>();
		jogadores2.add(j4);
		jogadores2.add(j6);
		
		Assert.assertEquals("jogadores diferentes", jogadores , g1.getJogadores());
		Assert.assertEquals("jogadores diferentes", jogadores2 , g2.getJogadores());
		
		g1.removeJogador(j3);
		jogadores.remove(j3);
		Assert.assertEquals("jogadores diferentes", jogadores , g1.getJogadores());
	}
	
	@Test
	public void testDono() throws Exception{
		Assert.assertEquals("Dono errado", j1, g1.getDono());
		Assert.assertEquals("Dono errado", j2, g2.getDono());
		
		g1.setDono(j3);
		g2.setDono(j4);
		
		Assert.assertEquals("Dono errado", j3, g1.getDono());
		Assert.assertEquals("Dono errado", j4, g2.getDono());
	}
	
	@Test
	public void testSenha(){
		Assert.assertNull("Senha Errada", g1.getSenha());
		Assert.assertNull("Senha Errada", g2.getSenha());
		
		g1.setSenha("1235ssdj", j1);
		Assert.assertTrue("Senha Errada", g1.getSenha().equals("1235ssdj"));
		g1.setSenha("testwww", j3);		//tenta mudar a senha sem ser o dono
		Assert.assertFalse("Senha Errada", g1.getSenha().equals("testwww"));
		
		g2.setSenha("askfnns", j2);
		Assert.assertTrue("Senha Errada", g2.getSenha().equals("askfnns"));
		g2.setSenha("senha", j4);		//tenta mudar a senha sem ser o dono
		Assert.assertFalse("Senha Errada", g2.getSenha().equals("senha"));
		
	}
	
	@Test
	public void testRetiraSenhaIsPublic(){
		
		g1.setSenha("1235ssdj", j1);
		Assert.assertTrue("Senha Errada", g1.getSenha().equals("1235ssdj"));
		Assert.assertTrue("Nao e Permitido", g1.retiraSenha(j1));
		Assert.assertNull("Senha Errada", g1.getSenha());
		Assert.assertTrue("Grupo Fechado", g1.isPublic());
		
		g1.setSenha("1235ssdj", j1);
		Assert.assertFalse("Nao e Permitido", g1.retiraSenha(j3));		//Tenta tornar o grupo aberto sem ser o dono
		Assert.assertTrue("Senha Errada", g1.getSenha().equals("1235ssdj"));
		Assert.assertFalse("Grupo Fechado", g1.isPublic());
		
		
		g2.setSenha("askfnns", j2);
		Assert.assertTrue("Senha Errada", g2.getSenha().equals("askfnns"));
		Assert.assertTrue("Nao e Permitido", g2.retiraSenha(j2));
		Assert.assertNull("Senha Errada", g2.getSenha());
		Assert.assertTrue("Grupo Fechado", g2.isPublic());
		
		g2.setSenha("askfnns", j2);
		Assert.assertFalse("Nao e Permitido", g2.retiraSenha(j3));		//Tenta tornar o grupo aberto sem ser o dono
		Assert.assertTrue("Senha Errada", g2.getSenha().equals("askfnns"));
		Assert.assertFalse("Grupo Fechado", g2.isPublic());
		
	}
}
